// package com.wl2o2o.writtenview.hand;
//
// import javax.swing.tree.TreeNode;
//
// public class Solution1 {
//     /**
//      * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
//      * @param root TreeNode类
//      * @return int整型
//      */
//     // write code here
//     private int maxSum = Integer.MIN_VALUE;
//     // private int without
//     private int[][] dp;
//     public int maxValue (TreeNode root) {
//         // 初始化深度数组和dp数组
//         depth = new int[100001];
//         dp = new int[100001][2];
//
//         dfs(root, 0);
//
//         // 遍历，找最大
//         int maxSum = Integer.MIN_VALUE, maxDep = 0;
//         for (int i = 0; i <= depth[root.val]; i++) {
//             maxSum = Math.max(maxSum, dp[i][0]);
//             maxSum = Math.max(maxSum, dp[i][1]);
//             if (maxSum == dp[i][0] || maxSum == dp[i][1]) {
//                 maxDep = i;
//             }
//         }
//         return maxDep;
//     }
//
//     // 深搜
//
//     public void dfs(TreeNode node, int currentDep) {
//         if (node == null) return;
//
//         depth[node.val] = currentDep;
//         // 前序遍历左右计算权值
//         dfs(node.left, currentDep + 1);
//         dfs(node.right, currentDep + 1);
//
//         // 计算交换与不交换最大层权值，存入dp
//         int sumNoSwap = dp[currentDep][0] + node.val;
//         int sumYesSwap = dp[currentDep + 1][0] + node.val;
//         dp[currentDep + 1][0] = Math.max(sumNoSwap, dp[currentDep + 1][0]);
//         dp[currentDep + 1][1] = Math.max(sumYesSwap, dp[currentDep + 1][1]);
//
//
//     }
// }